

// 发布后的文章
pub struct Post {
    content: String,
}

// 文章草稿
pub struct PostDraft {
    content: String,
}

// 文章预览的状态
pub struct PostReview {
    content: String,
}

impl Post {
    // 新建立一个草稿
    pub fn new() -> PostDraft  {
        PostDraft {
            content : String::new(),
        }
    }

    // 获取文章内容
    pub fn content (& self) -> &String {
       &self.content
    }

    // 撤销文章的发布状态
    pub fn unapprove(self) -> PostReview {
        PostReview {
            content: self.content
        }
    }
}

impl PostDraft {

    // 返回一个预览状态的对象
    pub fn request_review(self) -> PostReview {
        PostReview {
            content : self.content
        }
    }

    // 向草稿添加文字
    pub fn add_text(&mut self, content:&str) {
        self.content.push_str(content);
    }

    // 编辑文本
    pub fn edit(&mut self, content:&str) {
        self.content.clear();
        self.add_text(content);
    }
}

impl PostReview {
    pub fn approve(self) -> Post {
        Post {
            content : self.content
        }
    }
    pub fn reject(self) -> PostDraft {
        PostDraft {
            content: self.content
        }
    }
}